#pragma once

#include <Totem/HashedString.h>
#include <libtcod/libtcod.hpp>
#include <glm/glm.hpp>
#include <string>

namespace Views
{
class ViewContent;

class IView
{
public:
	IView(const std::string &id) : id(id) {}
	virtual ~IView() {}

	virtual void update(float /*dt*/) = 0;
	virtual void render() = 0;

	virtual bool inputKeyDown(TCOD_key_t &key, TCOD_mouse_t &mouse) = 0;
	virtual bool inputKeyUp(TCOD_key_t &key, TCOD_mouse_t &mouse) = 0;
	virtual bool motion(TCOD_key_t &key, TCOD_mouse_t &mouse) = 0;
	virtual bool mousePressed(TCOD_key_t &key, TCOD_mouse_t &mouse) = 0;
	virtual bool mouseReleased(TCOD_key_t &key, TCOD_mouse_t &mouse) = 0;

	const std::string &getId() const { return id; }

protected:
	std::string id;
};

}
